package com.core.utils;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;


public class MyUtils {

	public static List<Map<String,Object>> resultSetConverList(ResultSet rs){
		List<Map<String,Object>> lists=new ArrayList<>();
		try {
			//查询结果集的游标指向第一行
			rs.beforeFirst();
			//创建ResultSetMetaData--> 包含查询结果集的列信息
			ResultSetMetaData data = rs.getMetaData();
			//遍历查询结果集
			while (rs.next()) {
				LinkedHashMap<String,Object> mapRow=new LinkedHashMap<>();
				//遍历每一行的信息
				for(int i=1;i<data.getColumnCount();i++) {
					//获取列属性
					String columnName = data.getColumnName(i);
					//获取列属性的值
					Object objValues = rs.getObject(columnName);
					//每一行的信息
					mapRow.put(columnName, objValues);
				}
				lists.add(mapRow);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return lists;
	}
	
	
	public static <T> List<T> resultSetConverBean(ResultSet rs,Class<T> tclass){
		List<T> lists=new ArrayList<>();
		try {
			//查询结果集的游标指向第一行
			rs.beforeFirst();
			//创建ResultSetMetaData--> 包含查询结果集的列信息
			ResultSetMetaData data = rs.getMetaData();
			//遍历查询结果集
			while (rs.next()) {
				T newInstance = tclass.newInstance();
				//遍历每一行的信息
				for(int i=1;i<data.getColumnCount();i++) {
					//获取列属性
					String columnName = data.getColumnName(i);
					
					String lowercolumnName = columnName.toLowerCase();
					//获取列属性的值
					Object objValues = rs.getObject(columnName);
					ConvertUtils.register(new DateLocaleConverter(), Date.class);
					BeanUtils.setProperty(newInstance, lowercolumnName, objValues);
				}
				lists.add(newInstance);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return lists;
	}
	
	
}
